const http = require('http')
const url = require('url')
const fs = require('fs')
const qs = require('querystring')
const path = require('path')
const server = http.createServer((req, res) => {
  // console.log(req.url)
  // console.log(url.parse(req.url))
  // console.log(req.headers['content-type'].split('boundary=')[1])
  console.log(req.headers)
  // 获取边界 boundary
  const boundary = req.headers['content-type']?.split('boundary=')?.[1]
  if (!boundary) {
    res.statusCode = 400
    res.end('header请求头错误')
  }

  if (req.url === '/upload') {
    // 这里必须要设置编码格式,不设置的话默认是utf-8
    req.setEncoding('binary')
    let body = ''
    req.on('data', (chunk) => {
      body += chunk
    })

    // '�PNG\r\n\n\rIHDRTTk�7IDATx���]g}����=��~����XuYn�-�^��66�����@H��,Z��w��@�\r�۸�nɒ�{���>s{9��O#!K�\r�yDῙ�����䃐k�җe�H��0Jo.`��8�r��i|��DC�v����ĮV��ZL����Z�D��$#��"G��\\��Bކ��<t`�\r#���y�f����jA�vA,�X�\n1�5��,�a(�0�\t��s�8����E�t��$\\�A��.b�J�J�L�_��s_��+�*J\\�X�EA…�Lpf�\\�w^>�U]-D��x?D�Ox�5�J���M�p�8_z�G�҈�4q�q� #�<�L�'��.b�X�v��2��d�y*�1g�g1~�@�7h�\t��M��\r]\\y^+�<�$�~�xIbZ�{�Y�ƥ�y��8��d�!ch2G�,F����fg?!�4)�3Ns�P@���W�����N.��DS�#�﷈P�{6��ryo�e���}U�>2E՚0q�0`�;�l2�"�,%��0׳yQ������@$������%��7�{������a�`����9V/P�1 �i�x�)&D��D�t�:�,ja�l�UK��_���1�1�!��_"�(x����6��v3*�'L����I#\t/e�<u�0`(�*�p����fq{��L�e-�e+�������x-��9�IEND�B`�\r\n'
    req.on('end', () => {
      const type = qs.parse(body, '\r\n', ': ')?.['Content-Type']
      if (!type) {
        res.statusCode = 400
        res.end('header请求头错误')
      }
      console.log(type)
      // 获取content-type 在body中 的索引
      const imageDataStartIdx = body.indexOf(type)
      // 获取type的长度
      const typeLen = type.length

      /* 
        1. 根据 imageDataStartLen typeLen截取body
        2. 清除 截取后的字符串前后的空格
        3. 截取-- + binary 前面的字符串
      */
      // 截取data中的数据
      let imageData = body.slice(imageDataStartIdx + typeLen).trim()
      imageData = imageData.slice(0, imageData.indexOf(`--${boundary}`))
      // console.log(imageData)
      fs.writeFile('./foo.png', imageData, { encoding: 'binary' }, (err) => {
        if (err) {
          console.log(err)
        }
        res.end('文件上传成功')
      })
    })
  }
})

const port = 8080
server.listen(port, () => {
  console.log(`${port}服务开启`)
})
